הקידוד וההתחברות למסד וגם הטבלאות מוגדרות על UTF-8.

אולם כאשר מזינים טקסט עם תווים זה חותך את הטקסט ולפעמים מוסיף תווים לא מוכרים וגם מוסיף את הטקסט בצורה כזאת amp-1489 amp-1513 amp-1500.

יש לציין שכאשר אין תווים הטקט מוזן מצויין.

רק הבעיה היא בדרך כלל בתווים מסוג " ' וכו'

צירפתי תקוד אולי מישהו יציץ ויראה איפה השגיאה.

ניסתי להכניס את התווים בפקודה preg_replace וזה לא עזר.

function url_slug($str, $options = array()) {
  // Make sure string is in UTF-8 and strip invalid UTF-8 characters
  $str = mb_convert_encoding((string)$str, 'UTF-8', mb_list_encodings());
 
  $defaults = array(
    'delimiter' => '-',
    'limit' => null,
    'lowercase' => true,
    'replacements' => array(),
    'transliterate' => false,
  );
 
  // Merge options
  $options = array_merge($defaults, $options);
 
  // Make custom replacements
  $str = preg_replace(array_keys($options['replacements']), $options['replacements'], $str);
 
  // Transliterate characters to ASCII
  if ($options['transliterate']) {
    $str = str_replace(array_keys($char_map), $char_map, $str);
  }
 
  // Replace non-alphanumeric characters with our delimiter
  $str = preg_replace('/[^\p{L}\p{Nd}]+/u', $options['delimiter'], $str);
 
  // Remove duplicate delimiters
  $str = preg_replace('/(' . preg_quote($options['delimiter'], '/') . '){2,}/', '$1', $str);
 
  // Truncate slug to max. characters
  $str = mb_substr($str, 0, ($options['limit'] ? $options['limit'] : mb_strlen($str, 'UTF-8')), 'UTF-8');
 
  // Remove delimiter from ends
  $str = trim($str, $options['delimiter']);
 
  return $options['lowercase'] ? mb_strtolower($str, 'UTF-8') : $str;
}


תודה רבה לעוזרים.

11 תשובות

avatar ענה intval ב 01 לספטמבר 2014 #

נראה שהפוקנרציה עצמה עובדת יופי.
מה אתה עושה הלעה עם הפלט שלה?

avatar ענה itzik ב 01 לספטמבר 2014 #

מנסה להזין נתונים שלפעמים כוללים תווים ופשוט זה לא נקלט במסד.

יותר מזה זה נקלט מחורבש או עם תווים לא קשורים.

avatar ענה intval ב 01 לספטמבר 2014 #

מה הקוד עושה הלעה עם הפלט של הפונקציה?
או אם אתה בטוח שהבעיה בפונקציה הזו - תוכל להוסיף לכאן את הקלט שלא עובד לך כמו שצריך ?

avatar ענה itzik ב 01 לספטמבר 2014 #

הטקסט הזה מוזן אוטומטית על ידי ה cron job.

להלן הכותרת שמוזנת : קצת שלג ושמיכות-זה מה שצריך בשביל 'בייבי בום': עלייה של 50% במספר הלידות

ומה שיוצא בתכלס: קצת שלג ושמיכות-זה מה שצריך

avatar ענה intval ב 01 לספטמבר 2014 #

זה לא נראה כאילו הבעיה היא בקוד שהבאת.
יכול להיות שיש מגבלה על עורך השדה בטבלה או שמשהו או מישהו גוזר אותו מאוחר יותר, אבל לא בתוך הפונקציה הזו.

avatar ענה itzik ב 01 לספטמבר 2014 #

קודם כל תודה רבה על העזרה.

ועדיין לא פתרתי תבעיה.

יכול להיות שהקוד הבא צריךלהיות אחרת.

function smarty_modifier_slug($title)
{
$slugged = url_slug(
    "$title",
  array(
    'delimiter' => '-',
    'limit' => 80,
    'lowercase' => true
  )
);
return $slugged;
}

avatar ענה itzik ב 01 לספטמבר 2014 #

הקפצה, עקב עריכת התגובה

avatar ענה Splash ב 01 לספטמבר 2014 #

תציג את הערך של title שכן כפי שאלכס כבר ציין הבעיה היא לא בפונקציה אלה בקוד שנמצא לפני.

echo url_slug(
    "שטיינמץ מציע למחזיקי אג\"ח סקורפיו תספורת של 82 מ' ש'",
  array(
    'delimiter' => '-',
    'limit' => 80,
    'lowercase' => true
  )
);

avatar ענה itzik ב 02 לספטמבר 2014 #

אוקיי לאחר בדיקה כנראה שהבעיה היא בקובץ simplepie.inc

הקובץ בגירסה 1.3.1

ניסתי להכניס את הקובץ בגירסת מפתחים 1.4

ופשוט הוא לא קורא תנתונים.

יש למישהו פתרון בנושא הזה?

למידע נוסף http://simplepie.org

avatar ענה Splash ב 02 לספטמבר 2014 #

זה בלתי אפשרי לעזור לך ככה,אנחנו לא הולכים להוריד את הסקריפט הנ"ל ולבדוק מה לא בסדר בו.
בכל מקרה לא נראה שהבעיה היא בסקריפט ,אם תריץ לדוגמא דרך -
http://simplepie.org/demo/?feed=http%3A%2F%2Frss.nrg.co.il%2Fnews%2F
אתה תראה שהכל בסדר,מה שאומר שזה משהו שאתה עושה שם לא בסדר,מה שאני מציע לך זה לבצע דיבאגינג לקוד ולעבור שורה שורה עד שתמצא מה גורם למחרוזת לקטוע את עצמה ככה.
ההשערה שלי שאתה מבצע בעזרת פונקצית מחרוזת כל שהיא [כנראה sub_str] פעולה על המחרוזת ללא קידוד מתאים ולכן המחרוזת נקטעת באמצע.

avatar ענה itzik ב 03 לספטמבר 2014 #

יכול להיות שבקוד הבא החסרתי משהו

<?php
/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 * @author Manuel Polacek / Hitflip
 */



/**
 * Smarty regex_replace modifier plugin
 *
 * Type:     modifier<br>
 * Name:     substring
 * Purpose:  substring like in php
 * @param string
 * @return string
 */

function smarty_modifier_slug($title)
{

$slugged = url_slug(
  "$title",
  array(
    'delimiter' => '-',
    'limit' => 80,
    'lowercase' => false
  )
);

return $slugged;
}

?>